home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok59.lha / AmokEd_V1.02b / txt / AmokEd.mod < prev    next >
Text File  |  1993-08-15  |  10KB  |  318 lines

  1. (*************************************************************************
  2.  
  3. :Program.    AmokEd.mod
  4. :Contents.   Top-Level Module for AmokEd
  5. :Author.     Hartmut Goebel
  6. :Address.    Aufseßplatz 5, D-8500 Nürnberg 40
  7. :Copyright.  Copyright © 1990,1991 by Hartmut Goebel
  8. :Copyright.  for further information see file Copyright.ReadMe
  9. :Language.   Oberon
  10. :Translator. Amiga Oberon Compiler V1.17.1
  11. :Imports.    SupLib (Hartmut Goebel)
  12. :History.    V0.1, 26 Sep 1990 Hartmut Goebel
  13. :History.    V1.0, 14 Apr 1991 Hartmut Goebel [hG]
  14. :History.    V1.1, 28 Apr 1991 [hG] ^Arguments-Checking (multi names)
  15. :Date.       02 Oct 1991 18:20:31
  16.  
  17. *************************************************************************)
  18.  
  19. MODULE AmokEd;
  20.  
  21. IMPORT
  22.   EdGadgets,
  23.   arg: Arguments,
  24.   d  : Dos,
  25.   e  : Exec,
  26.   edL: EdLowLevel,
  27.   ed1: EdCmd1,
  28.   ed2: EdCmd2,
  29.   edD: EdDisplay,
  30.   edE: EdErrors,
  31.   edF: EdFileTools,
  32.   edG: EdGlobalVars,
  33.   edK: EdKeyboard,
  34.   edM: EdMovement,
  35.   eMn: EdMenu,
  36.   edP: EdParser,
  37.   edR: EdRexx,
  38.   g  : Graphics,
  39.   I  : Intuition,
  40.   s  : SYSTEM,
  41.   u  : Utility;
  42.  
  43. VAR
  44.   iMsg: I.IntuiMessagePtr;
  45.   Buffer: edG.String;
  46.   PortBits, Mask: LONGSET;
  47.   GadNum, DontWait: INTEGER;
  48.   gadPtr: I.GadgetPtr;
  49.   menuCmd: edG.StringPtr;
  50.   rexxMsg: edR.RexxMsgPtr;
  51. CONST
  52.   NoGadget = -1;
  53.  
  54. (*-----------------------------------------------------------------------*)
  55. (*------ StartUp --------------------------------------------------------*)
  56.  
  57. PROCEDURE StartUp;
  58. TYPE
  59.   scolArray = ARRAY 1 OF e.UWORD;
  60. CONST
  61.   scol = scolArray (-1);
  62.   scrTags = u.Tags3 (I.saPens,s.ADR(scol),I.saOverscan,NIL,u.done,NIL);
  63.   newScr = I.ExtNewScreen(
  64.     0,0,0,0,0, (* left, top ||  width, height, depth filled in by program *)
  65.     0,1,       (* pens *)
  66.     {g.hires}, (* viewmodes *)
  67.     I.customScreen+{I.nsExtended},      (* type *)
  68.     NIL,s.ADR(edG.Copyright),NIL,NIL, (* font, title, gadgets, bitMap *)
  69.     s.ADR(scrTags)); (* extension *)
  70.  
  71. VAR
  72.   i, numArgs: INTEGER;
  73.   oldLock: d.FileLockPtr;
  74.   string: edG.StringPtr;
  75.   long: LONGINT;
  76.   WasNumber, SourceFile: BOOLEAN;
  77.   ns: I.ExtNewScreen;
  78.   wb: I.ScreenPtr;
  79. BEGIN
  80.   wb := I.OpenWorkBench();
  81.   edG.WBScreenDepth := wb.bitMap.depth;
  82.  
  83.   SourceFile := FALSE;
  84.   edF.GetConfig;
  85.   numArgs := arg.NumArgs();
  86.   IF numArgs > 0 THEN
  87.     string := s.ADR(Buffer[2]);
  88.     i := numArgs;
  89.     REPEAT
  90.       arg.GetArg(i,Buffer);
  91.       IF Buffer[0] = "-" THEN
  92.         WasNumber := edL.StrToInt(string,long) & (long < MAX(INTEGER));
  93.         CASE CAP(Buffer[1]) OF
  94.         "F": SourceFile := TRUE; | (* source alternativ *)
  95.         "S": IF WasNumber THEN (* open screen *)
  96.                edG.Config.screenDepth := SHORT(long); END; |
  97.         "L": IF WasNumber THEN
  98.                edG.Config.edges.left := SHORT(long); END; |
  99.         "T": IF WasNumber THEN
  100.                edG.Config.edges.top := SHORT(long); END; |
  101.         "W": IF WasNumber THEN
  102.                edG.Config.edges.width := SHORT(long); END; |
  103.         "H": IF WasNumber THEN
  104.                edG.Config.edges.height := SHORT(long); END; |
  105.         ELSE END;
  106.       END;
  107.       DEC(i);
  108.     UNTIL i = 0;
  109.   END;
  110.   IF edG.Config.screenDepth > 0 THEN
  111.     IF (edG.Config.screenDepth > 4) THEN
  112.       edG.Config.screenDepth := 4 END;
  113.     ns := newScr;
  114.     ns.ns.depth := edG.Config.screenDepth;
  115.     ns.ns.width := g.gfx.normalDisplayColumns;
  116.     ns.ns.height := g.gfx.normalDisplayRows;
  117.     IF ns.ns.height > 282 THEN
  118.       ns.ns.viewModes := {g.hires,g.lace}; END;
  119.     edG.Screen := I.OpenScreen(ns);
  120.   END;
  121.   IF numArgs > 0 THEN
  122.     REPEAT
  123.       INC(i);
  124.       arg.GetArg(i,Buffer);
  125.       IF Buffer[0] # "-" THEN
  126.         ed2.doNewWindow;
  127.         edG.Arg[0] := s.ADR(Buffer); edG.ArgSet := {edF.newFile};
  128.         edF.doLoad;
  129.         IF edG.Rc < edE.AbortLevel THEN
  130.           d.UnLock(edG.Text.dirLock);
  131.           edG.Text.dirLock := d.DupLock(arg.GetLock(i));
  132.         END;
  133.         edL.WindowTitle;
  134.       END;
  135.     UNTIL i = numArgs;
  136.   END;
  137.   IF edG.Text = NIL THEN ed2.doNewWindow; END;
  138.   edG.ArgSet := {edF.sourceDoNotTitle};
  139.   edG.Arg[0] := s.ADR("s:.aedrc"); edF.doSource;
  140.   IF NOT SourceFile THEN
  141.     edG.ArgSet := {edF.sourceDoNotTitle};
  142.     edG.Arg[0] := s.ADR(".aedrc");
  143.   ELSE
  144.     edG.ArgSet := {};
  145.     edG.Arg[0] := s.ADR(Buffer[2]);
  146.   END;
  147.   edF.doSource;
  148. END StartUp;
  149.  
  150. (*-----------------------------------------------------------------------*)
  151. (*------ Intui Check ----------------------------------------------------*)
  152.  
  153. PROCEDURE IntuiCheck;
  154. BEGIN
  155.   INCL(edG.Status,edG.msgCheck);
  156.   IF iMsg.idcmpWindow # edG.Text.window THEN
  157.     IF edG.multiMode IN edG.Status THEN RETURN END;
  158.     (* Umschalten nicht erlaubt, wenn im MultiReplaceMode *)
  159.     EXCL(edG.Text.status,edG.quit);
  160.     IF NOT (edG.iconMode IN edG.Text.status) THEN
  161.       edD.TextCursor(FALSE);
  162.       IF edG.commLineMode IN edG.Status THEN
  163.         ed1.EscapeCommLineMode;
  164.       ELSE
  165.         edD.PutBackLine; (* ist ja schon zurückgeschrieben *)
  166.       END;
  167.       edL.WindowTitle;
  168.     END;
  169.     edD.SwitchEdit(edL.FindEdit(iMsg.idcmpWindow));
  170.     IF NOT (edG.iconMode IN edG.Text.status) THEN edD.TextCursor(TRUE); END;
  171.     GadNum := NoGadget;
  172.     RETURN;
  173.   END;
  174.  
  175.   edG.Mx := iMsg.mouseX;
  176.   edG.My := iMsg.mouseY;
  177.  
  178.   IF I.gadgetDown IN iMsg.class THEN
  179.     ed1.HandleQuitFlags;
  180.     gadPtr := s.VAL(I.GadgetPtr,iMsg.iAddress);
  181.     GadNum := gadPtr.gadgetID;
  182.     EdGadgets.DrawKnob(GadNum);
  183.     RETURN;
  184.   ELSIF I.gadgetUp IN iMsg.class THEN
  185.     ed1.HandleQuitFlags;
  186.     gadPtr := s.VAL(I.GadgetPtr,iMsg.iAddress);
  187.     GadNum := gadPtr.gadgetID;
  188.     IF (GadNum = 2) OR (GadNum = 3) THEN EdGadgets.SetPropKnob; END;
  189.   ELSIF I.rawKey IN iMsg.class THEN
  190.     IF edG.multiMode IN edG.Status THEN
  191.       edD.TextCursor(FALSE);
  192.       ed2.MultiReplace(iMsg);
  193.       edD.TextCursor(TRUE);
  194.       RETURN;
  195.     END;
  196.     IF edK.GetKeyText(iMsg,CHR(iMsg.code),iMsg.qualifier,Buffer) > 0 THEN
  197.       edP.doCommand(s.ADR(Buffer)); END;
  198.   ELSIF I.mouseMove IN iMsg.class THEN
  199.     ed1.unIconify;
  200.     IF edK.GetKeyText(NIL,edK.qMove,iMsg.qualifier,Buffer) > 0 THEN
  201.       edP.doCommand(s.ADR(Buffer)); END;
  202.   ELSIF I.mouseButtons IN iMsg.class THEN
  203.     CASE iMsg.code OF
  204.       I.selectDown,I.menuDown:
  205.         IF edG.iconMode IN edG.Text.status THEN
  206.           ed1.unIconify;
  207.           edD.TextCursor(TRUE);
  208.         ELSE
  209.           I.ReportMouse(edG.Text.window,I.LTRUE);
  210.           ed1.unIconify;
  211.           IF edK.GetKeyText(NIL,CHR(iMsg.code),
  212.                             iMsg.qualifier,Buffer) > 0 THEN
  213.             edP.doCommand(s.ADR(Buffer)); END;
  214.         END;
  215.       |I.selectUp,I.menuUp:
  216.         I.ReportMouse(edG.Text.window,I.LFALSE);
  217.     ELSE
  218.     END;
  219.   ELSIF I.menuPick IN iMsg.class THEN
  220.      menuCmd := eMn.GetMenuCmd(iMsg);
  221.      IF menuCmd#NIL THEN edP.doCommand(menuCmd); END;
  222.   ELSIF I.newSize IN iMsg.class THEN
  223.     ed1.HandleQuitFlags;
  224.     edD.TextCursor(FALSE);
  225.     IF edG.commLineMode IN edG.Status THEN
  226.       ed1.EscapeCommLineMode;
  227.     ELSE
  228.       edD.PutBackLine;
  229.     END;
  230.     edD.SetWindowParams;
  231.     edD.TextSync;
  232.     IF NOT (edG.alreadyRedrawn IN edG.Status) THEN
  233.       edD.TextRedisplay; END;
  234.     edD.TextCursor(TRUE);
  235.   ELSIF I.closeWindow IN iMsg.class THEN
  236.     IF edG.commLineMode IN edG.Status THEN
  237.       ed1.EscapeCommLineMode;
  238.     ELSE
  239.       edD.PutBackLine;
  240.     END;
  241.     edD.SwitchEdit(edL.FindEdit(iMsg.idcmpWindow));
  242.     ed1.doQuit;
  243.   END;
  244.   GadNum := NoGadget;
  245. END IntuiCheck;
  246.  
  247. (*-----------------------------------------------------------------------*)
  248. (*----- Programm Start --------------------------------------------------*)
  249. (*-----------------------------------------------------------------------*)
  250.  
  251. BEGIN
  252.   INCL(edG.Status,edG.noCursor);
  253.   StartUp;
  254.   EXCL(edG.Status,edG.noCursor);
  255.   edD.TextCursor(TRUE);
  256.   edL.Title(edG.Copyright); edG.Rc := edE.TitleThreshhold+1;
  257.  
  258. (*-----------------------------------------------------------------------*)
  259. (*----- Main Loop -------------------------------------------------------*)
  260.  
  261.   Mask := LONGSET{edG.MainPort.sigBit};
  262.   IF edG.arexxAvail IN edG.Status THEN INCL(Mask,edR.RxPortSigBit); END;
  263.   DontWait := 1; GadNum := NoGadget;
  264.   REPEAT (* Main *)
  265.     IF NOT (edG.iconMode IN edG.Text.status) THEN edL.WindowTitle; END;
  266.     IF DontWait # 0 THEN DEC(DontWait);
  267.                     ELSE PortBits := e.Wait(Mask); END;
  268.     (*
  269.      *  NOTE: due to operation of edL.BreakCheck(), the userport signal
  270.      *  may not be set even if there are messages pending.
  271.      *)
  272.     IF (edR.RxPortSigBit IN PortBits) & ~(edG.multiMode IN edG.Status) THEN
  273. (*---------- handle Rexx-Msg ---------------------------------------------*)
  274.       LOOP
  275.         rexxMsg := e.GetMsg(edR.RxPort); IF rexxMsg = NIL THEN EXIT; END;
  276.         IF edR.IsRexxMsg(rexxMsg) OR edR.IsApplMsg(rexxMsg) THEN
  277.           INCL(edG.Status,edG.isRexx);
  278.           edG.Rc := edE.cmdValid0; ed1.HandleQuitFlags;
  279.           edD.TextCursor(FALSE);
  280.           edP.doCommand(s.VAL(LONGINT,rexxMsg.args[0])); (* Kommandos ausführen *)
  281.           IF edG.Text # NIL THEN edD.TextCursor(TRUE); END;
  282.           rexxMsg.result1 := edG.Rc;
  283.           edG.Status := edG.Status-LONGSET{edG.isRexx,edG.isAppl};
  284.         END;
  285.         e.ReplyMsg(rexxMsg);
  286.         IF edG.quitQuit IN edG.Status THEN EXIT; END;
  287.       END;
  288. (*---------- handle Intui-Msg --------------------------------------------*)
  289.     ELSIF edG.MainPort.sigBit IN PortBits THEN  (* Port für alle Fenster *)
  290.       LOOP
  291.         iMsg := e.GetMsg(edG.MainPort); IF iMsg = NIL THEN EXIT; END;
  292.         IntuiCheck;
  293.         IF NOT (edG.dontReplyIntuiMsg IN edG.Status) THEN
  294.           e.ReplyMsg(iMsg);
  295.         END;
  296.         EXCL(edG.Status,edG.dontReplyIntuiMsg);
  297.         IF edG.quitQuit IN edG.Status THEN EXIT; END;
  298.       END; (* LOOP *)
  299.     END; (* sigBits *)
  300. (*---------- handle Gadgets ----------------------------------------------*)
  301.     IF GadNum # NoGadget THEN
  302.       INC(DontWait);
  303.       IF edG.commLineMode IN edG.Status THEN ed1.EscapeCommLineMode; END;
  304.       edG.Rc := edE.cmdInitial;
  305.       edD.TextCursor(FALSE);
  306.       IF NOT (I.windowActive IN edG.Text.window.flags) THEN
  307.         EdGadgets.SetPropKnob; END;
  308.       CASE GadNum OF
  309.        (*1: (* scroll bar *) EdGadgets.MovePropKnob;*)
  310.       |2: (* arrow up   *) edM.doScrollUp;
  311.       |3: (* arrow down *) edM.doScrollDown;
  312.       ELSE END;
  313.       edD.TextCursor(TRUE);
  314.     END;
  315.   UNTIL edG.quitQuit IN edG.Status; (* REPEAT: Main *)
  316. END AmokEd.
  317.  
  318.